package vip.ifmm.lehouse.commodity.service.helper;

import vip.ifmm.lehouse.common.bo.CommodityBo;
import vip.ifmm.lehouse.common.model.Commodity;
import vip.ifmm.lehouse.common.model.CommodityDetail;
import vip.ifmm.lehouse.common.model.CommodityImageLink;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * 商品类的帮助类
 *
 * @author Fish
 * <p>Email: fishinlove@163.com</p>
 * <p>created by 2019/06/21 19:51:24</p>
 */
public class CommodityHelper {

    /**
     * 判断这个对象是否合法
     * 主要是内部需要的值不能为空
     *
     * @param commodityBo 要被判断的对象
     * @return true 对象合法，false 对象不合法
     */
    public static boolean isValid(CommodityBo commodityBo) {
        try {
            Objects.requireNonNull(commodityBo);
            Objects.requireNonNull(commodityBo.getCommodity());
            Objects.requireNonNull(commodityBo.getCommodityStatusType());
            Objects.requireNonNull(commodityBo.getLinkedImages());
        } catch (NullPointerException e) {
            // 发生空指针异常意味着上面的检验没有通过，有对象为 null
            return false;
        }

        return true;
    }

    /**
     * 从 commodityBo 中获取到商品信息，并进行初始化和处理
     *
     * @param commodityBo 商品信息
     * @return 返回处理过的商品对象
     */
    public static Commodity commodityFrom(CommodityBo commodityBo, int commodityDetailId) {
        Commodity commodity = commodityBo.getCommodity();

        // 设置商品状态
        commodity.setCommodityDetailId(commodityDetailId);
        commodity.setCommodityStatus(commodityBo.getCommodityStatusType().getValue());
        commodity.setCommodityCreateTime(new Date());
        commodity.setCommodityUpdateTime(new Date());
        return commodity;
    }

    /**
     * 从 commodityBo 中获取到商品详情信息，并进行初始化和处理
     *
     * @param commodityBo 商品信息
     * @return 返回处理过的商品详情对象
     */
    public static CommodityDetail detailFrom(CommodityBo commodityBo) {
        CommodityDetail detail = new CommodityDetail();
        detail.setCommodityDetail(commodityBo.getCommodityDetail());
        detail.setCommodityDetailCreateTime(new Date());
        detail.setCommodityDetailUpdateTime(new Date());
        return detail;
    }

    /**
     * 从 commodityBo 中获取到商品图片信息，并进行初始化和处理
     *
     * @param commodityBo 商品信息
     * @return 返回处理过的商品图片对象
     */
    public static List<CommodityImageLink> imagesFrom(CommodityBo commodityBo, int commodityId) {

        // 将图片包装成需要的对象
        List<String> linkedImages = commodityBo.getLinkedImages();
        List<CommodityImageLink> result = new ArrayList<>(linkedImages.size() + 1);
        for (String image : linkedImages) {
            CommodityImageLink one = new CommodityImageLink();
            one.setLinkCommodityId(commodityId);
            one.setLinkEnclosureUrl(image);
            one.setLinkCreateTime(new Date());
            one.setLinkUpdateTime(new Date());
            result.add(one);
        }
        return result;
    }
}
